/**
 * @description 用于Promise的错误处理，避免使用try-catch的模式
 * @template T - Promise返回值的类型
 * @param {Promise<T>} promise - 需要处理的Promise
 * @returns {Promise<[Error | null, T | null]>} 返回一个元组，第一个元素为错误对象或null，第二个元素为Promise解析值或null
 * @example
 * const [error, data] = await awitto(fetchData());
 * if (error) {
 *   console.error('请求失败:', error);
 *   return;
 * }
 * console.log('请求成功:', data);
 */
export const awitto = async <T>(
  promise: Promise<T>
): Promise<[Error | null, T | null]> => {
  try {
    const result = await promise;
    return [null, result];
  } catch (error) {
    return [error instanceof Error ? error : new Error(String(error)), null];
  }
};
